package com.itguigu.principle.segregation;

/**
 * 问题代码示例
 */
public class Segregation1 {
    public static void main(String[] args) {

    }
}

/**
 * 接口Interface1有5个方法
 */
interface Interface1 {
    void operation1();

    void operation2();

    void operation3();

    void operation4();

    void operation5();
}

/**
 * B类实现了Interface1的所有方法
 */
class B implements Interface1 {

    @Override
    public void operation1() {
        System.out.println("B实现了 operation1");
    }

    @Override
    public void operation2() {
        System.out.println("B实现了 operation2");
    }

    @Override
    public void operation3() {
        System.out.println("B实现了 operation3");
    }

    @Override
    public void operation4() {
        System.out.println("B实现了 operation4");
    }

    @Override
    public void operation5() {
        System.out.println("B实现了 operation5");
    }
}

/**
 * D类实现了Interface1中的所有方法
 */
class D implements Interface1 {

    @Override
    public void operation1() {
        System.out.println("D实现了 operation1");
    }

    @Override
    public void operation2() {
        System.out.println("D实现了 operation2");
    }

    @Override
    public void operation3() {
        System.out.println("D实现了 operation3");
    }

    @Override
    public void operation4() {
        System.out.println("D实现了 operation4");
    }

    @Override
    public void operation5() {
        System.out.println("B实现了 operation5");
    }
}

/**
 * A类通过接口Interface1去使用B类
 * 但是只会用到B类方法1,2,3,从这里可以看出来B类白重写了未使用的方法
 */
class A {
    // 注意这里是利用Interface1去调用B类的方法,因为B类是Interface1的子类
    // 因为Interface1不是最小接口,所以造成了重写了很多没有用的方法
    public void depend1(Interface1 i) {
        i.operation1();
    }

    public void depend2(Interface1 i) {
        i.operation2();
    }

    public void depend3(Interface1 i) {
        i.operation3();
    }
}

/**
 * C类通过接口Interface1去使用D类
 * 但是只会用到D类方法1,4,5,从这里可以看出来D类白重写了未使用的方法
 */
class C {
    public void depend1(Interface1 i) {
        i.operation1();
    }

    public void depend4(Interface1 i) {
        i.operation4();
    }

    public void depend5(Interface1 i) {
        i.operation5();
    }
}
